Read Buf

Read Buf

使用继电器和 zigbee 实现自动打开大门

如何使用智能继电器将没有遥控功能的门自动化,并通过Home Assistant将其集成到HomeKit中。

自从搬到现在的房子已经快四年了。这块地是我自己买的,房子也是我从头开始建的,所以我对其有很大的控制权。例如,我确保每个灯、门、百叶窗等都有手动开关。我们很少使用RF遥控器来开关设备。

唯一的例外是我们的门。

这是一个滑动门系统,可以承载重型门。电机和系统来自BFT公司,这在土耳其的住宅应用中是一个非常常见的品牌。这个门没有物理开关,因为物理开关不太实用。门主要在我想把车停进车库时使用,所以需要能够远程打开它。

使用RF遥控器的问题

pic

但是我在使用遥控器时遇到了几个问题:

  • 遥控器笨重且体积大
  • 遥控器通常放在车里,因此在家中无法打开门
  • 我想将它接入我的Home Assistant系统,通过iPhone轻松实现自动化。例如,我可以通过手机或CarPlay远程打开门,或者确认门是开着还是关着。

RF遥控器通过433 MHz频率的滚动码工作。当提到RF遥控器时,最先想到的解决方案是购买一个通用的IF/RF中心,这种设备可以复制遥控器代码并能集成到HomeKit或HomeAssistant中。

其中一个产品是BroadLink RM4 pro。有很多类似的产品,但它们的工作方式是将现有的遥控器放在旁边,经过一些操作后,中心可以发送和接收与原始RF遥控器相同的代码。这个中心需要放在你想控制的设备附近(在我的情况下是门的开关)。

但有一个问题:这些产品对使用滚动码的遥控器不太有效。你可能会问,什么是滚动码?

滚动码指的是每次使用遥控器时都会生成一个新代码。当你按下遥控器按钮时,会创建一个唯一代码,只有门的接收器可以解密这个代码。这种技术也叫非对称加密,或对一些人来说是公钥加密。它非常安全,可以有效防止入侵者在你进入家门时复制RF信号。

使用智能继电器

复制射频遥控器是不可能的,所以我必须寻找其他方法。偶然间,我看到了一张电机外壳内部的照片,发现BFT电机有很多I/O选项可以直接控制大门。我立刻走出去打开了电机的外壳。

pic

我家里的BFT电机使用的是HAMAL ARES控制板,手册上提供了很多信息。最重要的端口是60/61端口和L/N(220V电源)。如果通过60/61端口短路大门,它就会打开(如果关闭)或关闭(如果已经打开)。

pic

我决定测试一下,于是剪了一根2.5毫米的电缆并试了一下,结果确实成功了:

既然我们已经验证了可以通过这些端口打开大门,下一步就是实现远程控制。这就是智能继电器的作用。继电器是一种具有WiFi、Zigbee、Matter等功能的电路。有很多种类的继电器,对于我们的门,我们只需要一个“干触点继电器”。这种继电器可以在不向触点施加能量的情况下关闭或打开开关:

干触点的功能就像一个普通开关,控制电路的连接。它在关闭时允许电流流动,而在打开时则阻止电流。

因此,我买了一个“Zigbee干触点继电器”。我也有几个WiFi干触点继电器,但我最近购买了一个带有Zigbee集线器(SkyConnect)的Home Assistant Green,所以决定使用Zigbee,但你可以选择任何你喜欢的品牌。我买的是一家中国无名公司的产品,不过有朋友建议我购买Aqara T2双继电器,所以我订购了一个,准备更换,但目前先用这个。

pic

当然,继电器本身仍然需要电源来控制开关。有很多种为继电器供电的方法,但我买的这个继电器有一个220V电源输入(以及24V直流输入),而Hamal控制板的前两个端口提供220V电源,所以我只需将主板的电源输出连接到继电器的电源输入。接下来,继电器还有几个其他输出;对我们来说,最重要的是COM和NO输入。

pic

我们的目标是触发短路,但默认情况下保持关闭状态。因此,我们需要确保使用COM和NO端口。NO表示“常开”,这意味着COM和NO连接在一起时默认是断开的。但如果我们打开继电器,COM和NO就会闭合,短路60/61端口,触发大门打开。

pic

pic

HomeAssistant 和 HomeKit 集成

完成初步设置后,接下来就是将设备注册到Zigbee集线器中,并在HomeAssistant中将继电器作为一个设备显示,然后将其连接到HomeKit(这一过程是自动完成的,稍后会详细说明)。

首先,在将继电器添加到Zigbee集线器后,我发现它在Home Assistant中被识别为一个灯光设备。这意味着当你通过COM/NO端口启用开关时,它看起来像是打开了一个灯泡。

pic

不过,这并不是问题。我们可以将其视为一个灯泡,只需打开或关闭灯泡就可以控制大门的开关。我们还可以创建一个虚拟设备,打开灯泡,稍等片刻,然后关闭灯泡。这种操作也被称为“点动”,我们希望模拟一次瞬时按钮点击。

幸运的是,Home Assistant有一个叫做模板(template)的功能,可以用来创建内置的虚拟设备。其中一个虚拟设备叫做cover模板。我不想让事情变得更复杂,但下面你可以看到我们配置了一个虚拟设备,可以用来打开、关闭和停止一个cover:

cover:
  - platform: template
    covers:
      garage_door:
        device_class: garage
        friendly_name: "Gate Door"
        icon_template: >-
          {% if is_state('binary_sensor.gate_sensor_opening', 'on') %}
            mdi:gate-open
          {% elif is_state('binary_sensor.gate_sensor_opening', 'off') %}
            mdi:gate
          {% endif %}
        value_template: >-
          {% if is_state('binary_sensor.gate_sensor_opening', 'on') %}
            open
          {% elif is_state('binary_sensor.gate_sensor_opening', 'off') %}
            closed
          {% endif %}
        unique_id: garage_door_cover
        open_cover:
         - condition: state
           entity_id: binary_sensor.gate_sensor_opening
           state: "off"
         - service: light.turn_on
           target:
            entity_id: light.bft_dry_contact_relay_light
         - delay:
             milliseconds: 200
         - service: light.turn_off
           target:
             entity_id: light.bft_dry_contact_relay_light
        close_cover:
         - condition: state
           entity_id: binary_sensor.gate_sensor_opening
           state: "on"
         - service: light.turn_on
           target:
            entity_id: light.bft_dry_contact_relay_light
         - delay:
             milliseconds: 200
         - service: light.turn_off
           target:
             entity_id: light.bft_dry_contact_relay_light

最重要的部分是open_cover和close_cover部分。当你在HomeAssistant上按下按钮来打开或关闭大门时,这些钩子会被调用。我们首先检查门是否关闭(off状态),然后打开继电器,等待200毫秒,再关闭继电器。这模拟了瞬时点击,就像按下射频遥控器的按钮一样。

你可能会问,我们如何检测门是否关闭?

这一部分由门传感器完成,我也安装了它。虽然我们不一定需要它,但它能让集成更加稳定,尤其是与HomeKit集成时,它可以告诉你门是关闭还是打开的状态。如果没有传感器,你可以使用乐观模式(optimistic mode),它通过内部状态来跟踪你何时触发大门的开关。无论如何,我决定使用门传感器,它们便宜且不贵。

pic

最后,我使用HomeKit集成,将HomeAssistant的各个部分作为可操作的实体在HomeKit中显示。这意味着你可以通过HomeAssistant使用HomeKit集成,将任何不兼容HomeKit的设备或一组设备暴露给HomeKit。

这非常棒,因为我现在可以用我的iPhone远程打开或关闭大门。而且,这一集成的最佳部分是,因为它是HomeKit的一部分,当使用CarPlay时有一个专用按钮,当我接近家时可以打开或关闭大门。真是太棒了!

通过iPhone,你可以使用Siri打开或关闭大门,也可以使用各种小部件或Home应用:

pic

当然,将其集成到HomeKit中还可以实现其他功能。我可以与我的家人共享它,使用Siri通过说“嘿Siri,打开大门”来打开它,并进一步自动化,例如当我接近家时打开大门,或确保我离开家时关闭大门。

这是我在车内看到的样子:

最后的想法

我对这一切的结果非常满意。这是我很久以来一直想做的事情,但不知道从哪里开始。我希望这篇博客文章能给你一些关于通过继电器自动化电机或某些家用电器的想法。

pic

一些安装过程中的随机想法:

  • 我不得不剪切各种电缆,并有机会使用我的新Knipex电缆剥线器。它使事情变得非常简单,每一刻我都很喜欢。如果你偶尔需要剥线或剪线并希望安心,我强烈推荐它。

  • 设置Zigbee继电器后,我发现延迟非常严重。我目前使用SkyConnect作为Zigbee集线器(通过ZHA)。我以为Zigbee比WiFi更好,因为干扰更少,但显然它也有类似于WiFi的问题。所以接下来,我会尝试将我的Zigbee集线器移到办公室,确保车库门在集线器的视线范围内。

  • 在HomeAssistant上添加虚拟设备不应该如此原始。我认为模板和脚本功能非常糟糕。然而,尽管如此,我还是对HomeAssistant能做到的事情感到惊讶。它是一个非常好的生态系统,但需要更多的关注和大量的研究。即使你购买了Home Assistant Green,也不是所有的东西都是即插即用的。